package cn.open.feishu.alert.common.enums;

import cn.open.feishu.alert.context.FeishuHandlerContext;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description 告警方式类型
 * @Author fandy.lin
 * @Date 2021/11/11 4:20 下午
 **/
@Getter
@AllArgsConstructor
public enum AlertModeEnum {
    DEFALUE("default", 0, "默认方式,自定义机器人群聊文本告警") {
        @Override
        public void handleSend(String robotName, String alertText, AlertTypeEnum alertType) {
            FeishuHandlerContext.getHandler(this.getType()).send(robotName, alertText, alertType);
        }
    },
    AT_CHARGE_PERSON("at_owner", 1, "自定义机器人群聊文本告警@负责人") {
        @Override
        public void handleSend(String robotName, String alertText, AlertTypeEnum alertType) {
            FeishuHandlerContext.getHandler(this.getType()).send(robotName, alertText, alertType);
        }
    },
    AT_CHARGE_PERSON_USE_APP_ROBOT("at_owner_use_app", 2, "公用机器人群聊文本告警@负责人") {
        @Override
        public void handleSend(String robotName, String alertText, AlertTypeEnum alertType) {
            FeishuHandlerContext.getHandler(this.getType()).send(robotName, alertText, alertType);
        }
    },
    SEND_CHARGE_PERSON_USE_APP_ROBOT("send_owner", 3, "公用机器人文本告警发送给服务负责人") {
        @Override
        public void handleSend(String robotName, String alertText, AlertTypeEnum alertType) {
            FeishuHandlerContext.getHandler(this.getType()).send(robotName, alertText, alertType);
        }
    },
    SEND_DEFINE("send_define", 4, "由调用方自定义实现") {
        @Override
        public void handleSend(String robotName, String alertText, AlertTypeEnum alertType) {
            FeishuHandlerContext.getHandler(this.getType()).send(robotName, alertText, alertType);
        }
    };

    /**
     * 类型
     */
    private String type;
    /**
     * 编码
     */
    private Integer code;
    /**
     * 状态名
     */
    private String desc;
    /**
     * 上下文
     */
    public static Map<String, AlertModeEnum> context;

    static {
        context = new HashMap<>();
        for (AlertModeEnum alertMode : AlertModeEnum.values()) {
            context.put(alertMode.getType(), alertMode);
        }
    }

    /**
     * 处理告警消息下发
     *
     * @param robotName
     * @param alertText
     * @param alertType
     */
    public abstract void handleSend(String robotName, String alertText, AlertTypeEnum alertType);


}
